<html>
                 <head>
                   <meta charset="UTF-8">
                   <meta name = "viewport" content = "width = device-width, initial-scale = 1, maximum-scale = 1">
                   <style id="style">
@font-face {
  font-family: 'Lato';
  src: url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/Lato-Regular.woff2') format('woff2'), /* Modern Browsers */
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/Lato-Regular.woff') format('woff'), /* Modern Browsers */
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/Lato-Regular.ttf') format('truetype');
  font-style: normal;
  font-weight: normal;
  text-rendering: optimizeLegibility;
}
@font-face {
  font-family: 'Lato';
  src: url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/Lato-Black.woff2') format('woff2'), /* Modern Browsers */
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/Lato-Black.woff') format('woff'), /* Modern Browsers */
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/Lato-Black.ttf') format('truetype');
  font-style: normal;
  font-weight: 700;
  text-rendering: optimizeLegibility;
}
@font-face {
  font-family: 'Material Icons';
  font-style: normal;
  font-weight: 400;
  src: local('Material Icons'),
       local('MaterialIcons-Regular'),
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/MaterialIcons-Regular.woff2') format('woff2'),
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/MaterialIcons-Regular.woff') format('woff'),
       url('file:///C:/Users/tangweiyang/AppData/Local/boost/app-0.11.12/resources/app/resources/fonts/MaterialIcons-Regular.ttf') format('truetype');
}
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td {
  margin: 0;
  padding: 0;
  border: 0;
  outline: 0;
  font-weight: inherit;
  font-style: inherit;
  font-family: inherit;
  font-size: 100%;
  vertical-align: baseline;
}
body {
  line-height: 1;
  color: #000;
  background: #fff;
}
ol,
ul {
  list-style: none;
}
table {
  border-collapse: separate;
  border-spacing: 0;
  vertical-align: middle;
}
caption,
th,
td {
  text-align: left;
  font-weight: normal;
  vertical-align: middle;
}
a img {
  border: none;
}
body {
  font-size: 16px;
  padding: 15px;
  font-family: helvetica, arial, sans-serif;
  line-height: 1.6;
  overflow-x: hidden;
  background-color: #fff;
}
body .katex {
  font: 400 1.2em 'KaTeX_Main';
  line-height: 1.2em;
  white-space: initial;
  text-indent: 0;
}
body .katex .mfrac>.vlist>span:nth-child(2) {
  top: 0 !important;
}
body .katex-error {
  background-color: #f2dede;
  color: #a64444;
  padding: 5px;
  margin: -5px;
  border-radius: 5px;
}
body .flowchart-error,
body .sequence-error .chart-error {
  background-color: #f2dede;
  color: #a64444;
  padding: 5px;
  border-radius: 5px;
  -webkit-box-pack: left;
  -moz-box-pack: left;
  -o-box-pack: left;
  -ms-flex-pack: left;
  -webkit-justify-content: left;
  justify-content: left;
}
li label.taskListItem {
  margin-left: -1.8em;
}
li label.taskListItem.checked {
  text-decoration: line-through;
  opacity: 0.5;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  filter: alpha(opacity=50);
}
li.taskListItem.checked {
  text-decoration: line-through;
  opacity: 0.5;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  filter: alpha(opacity=50);
}
div.math-rendered {
  text-align: center;
}
.math-failed {
  background-color: rgba(255,0,0,0.1);
  color: #d90000;
  padding: 5px;
  margin: 5px 0;
  border-radius: 5px;
}
sup {
  position: relative;
  top: -0.4em;
  font-size: 0.8em;
  vertical-align: top;
}
sub {
  position: relative;
  bottom: -0.4em;
  font-size: 0.8em;
  vertical-align: top;
}
a {
  color: #2bac8f;
  text-decoration: none;
  padding: 5px;
  border-radius: 5px;
  margin: -5px;
  -webkit-transition: 0.1s;
  -moz-transition: 0.1s;
  -o-transition: 0.1s;
  -ms-transition: 0.1s;
  transition: 0.1s;
}
a img {
  vertical-align: sub;
}
a:hover {
  color: #2eb899;
  text-decoration: underline;
  background-color: rgba(255,201,92,0.3);
}
a:visited {
  color: #2bac8f;
}
hr {
  border-top: none;
  border-bottom: solid 1px #d0d0d0;
  margin: 15px 0;
}
h1,
h2,
h3,
h4,
h5,
h6 {
  font-weight: bold;
  word-wrap: break-word;
}
h1 {
  font-size: 2.55em;
  padding-bottom: 0.3em;
  line-height: 1.2em;
  border-bottom: solid 1px #d0d0d0;
  margin: 1em 0 0.44em;
}
h1:first-child {
  margin-top: 0;
}
h2 {
  font-size: 1.75em;
  padding-bottom: 0.3em;
  line-height: 1.225em;
  border-bottom: solid 1px #d0d0d0;
  margin: 1em 0 0.57em;
}
h2:first-child {
  margin-top: 0;
}
h3 {
  font-size: 1.5em;
  line-height: 1.43em;
  margin: 1em 0 0.66em;
}
h4 {
  font-size: 1.25em;
  line-height: 1.4em;
  margin: 1em 0 0.8em;
}
h5 {
  font-size: 1em;
  line-height: 1.4em;
  margin: 1em 0 1em;
}
h6 {
  font-size: 1em;
  line-height: 1.4em;
  margin: 1em 0 1em;
  color: #777;
}
p {
  line-height: 1.6em;
  margin: 0 0 1em;
  white-space: pre-line;
  word-wrap: break-word;
}
img {
  max-width: 100%;
}
strong,
b {
  font-weight: bold;
}
em,
i {
  font-style: italic;
}
s,
del,
strike {
  text-decoration: line-through;
}
u {
  text-decoration: underline;
}
blockquote {
  border-left: solid 4px #3fb399;
  margin: 0 0 1em;
  padding: 0 25px;
}
ul {
  list-style-type: disc;
  padding-left: 2em;
  margin-bottom: 1em;
}
ul li {
  display: list-item;
}
ul li.taskListItem {
  list-style: none;
}
ul li p {
  margin: 0;
}
ul>li>ul,
ul>li>ol {
  margin: 0;
}
ul>li>ul {
  list-style-type: circle;
}
ul>li>ul>li>ul {
  list-style-type: square;
}
ol {
  list-style-type: decimal;
  padding-left: 2em;
  margin-bottom: 1em;
}
ol li {
  display: list-item;
}
ol li p {
  margin: 0;
}
ol>li>ul,
ol>li>ol {
  margin: 0;
}
code {
  padding: 0.2em 0.4em;
  background-color: #f7f7f7;
  border-radius: 3px;
  font-size: 1em;
  text-decoration: none;
  margin-right: 2px;
}
pre {
  padding: 0.5rem !important;
  border: solid 1px #d1d1d1;
  border-radius: 5px;
  overflow-x: auto;
  margin: 0 0 1rem;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  line-height: 1.4em;
}
pre code {
  background-color: inherit;
  margin: 0;
  padding: 0;
  border: none;
  border-radius: 0;
}
pre.CodeMirror {
  height: initial;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -o-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
pre.CodeMirror>code {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  overflow-x: auto;
}
pre.mermaid svg {
  max-width: 100% !important;
}
pre>span.filename {
  margin: -0.5rem 100% 0.5rem -0.5rem;
  padding: 0.125rem 0.375rem;
  background-color: #777;
  color: #fff;
}
pre>span.filename:empty {
  display: none;
}
pre>span.lineNumber {
  display: none;
  font-size: 1em;
  padding: 0.5rem 0;
  margin: -0.5rem 0.5rem -0.5rem -0.5rem;
  border-right: 1px solid;
  text-align: right;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
pre>span.lineNumber.CodeMirror-gutters {
  position: initial;
  top: initial;
  left: initial;
  min-height: 0 !important;
}
pre>span.lineNumber>span {
  display: block;
  padding: 0 0.5em 0;
}
table {
  display: block;
  width: 100%;
  margin: 0 0 1em;
  overflow-x: auto;
}
table thead tr {
  background-color: #fff;
}
table thead th {
  border-style: solid;
  padding: 6px 13px;
  line-height: 1.6;
  border-width: 1px 0 2px 1px;
  border-color: #d0d0d0;
  font-weight: bold;
}
table thead th:last-child {
  border-right: solid 1px #d0d0d0;
}
table tbody tr:nth-child(2n + 1) {
  background-color: #f9f9f9;
}
table tbody tr:nth-child(2n) {
  background-color: #fff;
}
table tbody td {
  border-style: solid;
  padding: 6px 13px;
  line-height: 1.6;
  border-width: 0 0 1px 1px;
  border-color: #d0d0d0;
}
table tbody td:last-child {
  border-right: solid 1px #d0d0d0;
}
kbd {
  background-color: #fafbfc;
  border: solid 1px #d0d0d0;
  border-bottom-color: #888;
  border-radius: 3px;
  -webkit-box-shadow: inset 0 -1px 0 #959da5;
  box-shadow: inset 0 -1px 0 #959da5;
  display: inline-block;
  font-size: 0.8em;
  line-height: 1;
  padding: 3px 5px;
}
.admonition.note,
.admonition.hint,
.admonition.danger,
.admonition.caution,
.admonition.error,
.admonition.attention {
  -webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2);
  box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2);
  position: relative;
  margin: 1.5625em 0;
  padding: 0 1.2rem;
  border-left: 0.4rem solid #448aff;
  border-radius: 0.2rem;
  overflow: auto;
}
html .admonition>:last-child {
  margin-bottom: 1.2rem;
}
.admonition .admonition {
  margin: 1em 0;
}
.admonition p {
  margin-top: 0.5em;
}
.admonition.note>.admonition-title:before,
.admonition.hint>.admonition-title:before,
.admonition.danger>.admonition-title:before,
.admonition.caution>.admonition-title:before,
.admonition.error>.admonition-title:before,
.admonition.attention>.admonition-title:before {
  position: absolute;
  left: 1.2rem;
  font-family: "Material Icons";
  font-weight: normal;
  font-style: normal;
  font-size: 24px;
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;
/* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;
/* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;
/* Support for IE. */
  font-feature-settings: 'liga';
}
.admonition.note>.admonition-title,
.admonition.hint>.admonition-title,
.admonition.danger>.admonition-title,
.admonition.caution>.admonition-title,
.admonition.error>.admonition-title,
.admonition.attention>.admonition-title {
  margin: 0 -1.2rem;
  padding: 0.8rem 1.2rem 0.8rem 4rem;
  border-bottom: 0.1rem solid rgba(68,138,255,0.1);
  background-color: rgba(68,138,255,0.1);
  font-weight: 700;
}
.admonition>.admonition-title:last-child {
  margin-bottom: 0;
}
.admonition.note {
  border-left-color: #0288d1;
}
.admonition.note>.admonition-title {
  border-bottom-color: 0.1rem solid rgba(2,136,209,0.2);
  background-color: rgba(2,136,209,0.2);
}
.admonition.note>.admonition-title:before {
  color: #0288d1;
  content: "note";
}
.admonition.hint {
  border-left-color: #009688;
}
.admonition.hint>.admonition-title {
  border-bottom-color: 0.1rem solid rgba(0,150,136,0.2);
  background-color: rgba(0,150,136,0.2);
}
.admonition.hint>.admonition-title:before {
  color: #009688;
  content: "info_outline";
}
.admonition.danger {
  border-left-color: #c2185b;
}
.admonition.danger>.admonition-title {
  border-bottom-color: 0.1rem solid rgba(194,24,91,0.2);
  background-color: rgba(194,24,91,0.2);
}
.admonition.danger>.admonition-title:before {
  color: #c2185b;
  content: "block";
}
.admonition.caution {
  border-left-color: #ffa726;
}
.admonition.caution>.admonition-title {
  border-bottom-color: 0.1rem solid rgba(255,167,38,0.2);
  background-color: rgba(255,167,38,0.2);
}
.admonition.caution>.admonition-title:before {
  color: #ffa726;
  content: "warning";
}
.admonition.error {
  border-left-color: #d32f2f;
}
.admonition.error>.admonition-title {
  border-bottom-color: 0.1rem solid rgba(211,47,47,0.2);
  background-color: rgba(211,47,47,0.2);
}
.admonition.error>.admonition-title:before {
  color: #d32f2f;
  content: "error_outline";
}
.admonition.attention {
  border-left-color: #455a64;
}
.admonition.attention>.admonition-title {
  border-bottom-color: 0.1rem solid rgba(69,90,100,0.2);
  background-color: rgba(69,90,100,0.2);
}
.admonition.attention>.admonition-title:before {
  color: #455a64;
  content: "priority_high";
}
dl {
  margin: 2rem 0;
  padding: 0;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  width: 100%;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -o-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: start;
  -moz-box-align: start;
  -o-box-align: start;
  -ms-flex-align: start;
  -webkit-align-items: flex-start;
  align-items: flex-start;
  border-bottom: 1px solid #d0d0d0;
  background-color: #fff;
}
dt {
  border-top: 1px solid #d0d0d0;
  font-weight: bold;
  text-align: right;
  overflow: hidden;
  -webkit-flex-basis: 20%;
  flex-basis: 20%;
  padding: 0.4rem 0.9rem;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
dd {
  border-top: 1px solid #d0d0d0;
  -webkit-flex-basis: 80%;
  flex-basis: 80%;
  padding: 0.4rem 0.9rem;
  min-height: 2.5rem;
  background-color: #fff;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
dd + dd {
  margin-left: 20%;
}
pre.fence {
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -o-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
pre.fence .chart,
pre.fence .flowchart,
pre.fence .mermaid,
pre.fence .sequence {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-pack: center;
  -moz-box-pack: center;
  -o-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  background-color: #fff;
  max-width: 100%;
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  -ms-box-flex: 1;
  box-flex: 1;
  -webkit-flex-grow: 1;
  flex-grow: 1;
}
pre.fence .chart canvas,
pre.fence .flowchart canvas,
pre.fence .mermaid canvas,
pre.fence .sequence canvas,
pre.fence .chart svg,
pre.fence .flowchart svg,
pre.fence .mermaid svg,
pre.fence .sequence svg {
  max-width: 100% !important;
}
body[data-theme="dark"] {
  color: #f9f9f9;
  border-color: #444b59;
  background-color: #2c3033;
}
body[data-theme="dark"] a:hover {
  background-color: rgba(90,214,186,0.2) !important;
}
body[data-theme="dark"] code {
  color: #ea6730;
  border-color: #3d4450;
  background-color: #363a3e;
}
body[data-theme="dark"] pre {
  border-color: #474f5c;
}
body[data-theme="dark"] pre code {
  background-color: transparent;
}
body[data-theme="dark"] label.taskListItem {
  background-color: #2c3033;
}
body[data-theme="dark"] table thead tr {
  background-color: #282b2e;
}
body[data-theme="dark"] table thead th {
  border-color: #444b59;
}
body[data-theme="dark"] table thead th:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="dark"] table tbody tr:nth-child(2n + 1) {
  background-color: #2c3033;
}
body[data-theme="dark"] table tbody tr:nth-child(2n) {
  background-color: #282b2e;
}
body[data-theme="dark"] table tbody td {
  border-color: #444b59;
}
body[data-theme="dark"] table tbody td:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="dark"] kbd {
  background-color: #444b59;
  color: #f9f9f9;
}
body[data-theme="dark"] dl {
  border-color: #444b59;
  background-color: #282b2e;
}
body[data-theme="dark"] dt {
  border-color: #444b59;
}
body[data-theme="dark"] dd {
  border-color: #444b59;
  background-color: #2c3033;
}
body[data-theme="solarized-dark"] {
  color: #93a1a1;
  border-color: #444b59;
  background-color: #073642;
}
body[data-theme="solarized-dark"] table thead tr {
  background-color: #06313b;
}
body[data-theme="solarized-dark"] table thead th {
  border-color: #444b59;
}
body[data-theme="solarized-dark"] table thead th:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="solarized-dark"] table tbody tr:nth-child(2n + 1) {
  background-color: #073642;
}
body[data-theme="solarized-dark"] table tbody tr:nth-child(2n) {
  background-color: #06313b;
}
body[data-theme="solarized-dark"] table tbody td {
  border-color: #444b59;
}
body[data-theme="solarized-dark"] table tbody td:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="solarized-dark"] dl {
  border-color: #444b59;
  background-color: #06313b;
}
body[data-theme="solarized-dark"] dt {
  border-color: #444b59;
}
body[data-theme="solarized-dark"] dd {
  border-color: #444b59;
  background-color: #073642;
}
body[data-theme="monokai"] {
  color: #f8f8f2;
  border-color: #444b59;
  background-color: #272822;
}
body[data-theme="monokai"] table thead tr {
  background-color: #23241f;
}
body[data-theme="monokai"] table thead th {
  border-color: #444b59;
}
body[data-theme="monokai"] table thead th:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="monokai"] table tbody tr:nth-child(2n + 1) {
  background-color: #272822;
}
body[data-theme="monokai"] table tbody tr:nth-child(2n) {
  background-color: #23241f;
}
body[data-theme="monokai"] table tbody td {
  border-color: #444b59;
}
body[data-theme="monokai"] table tbody td:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="monokai"] kbd {
  background-color: #1e2127;
}
body[data-theme="monokai"] dl {
  border-color: #444b59;
  background-color: #23241f;
}
body[data-theme="monokai"] dt {
  border-color: #444b59;
}
body[data-theme="monokai"] dd {
  border-color: #444b59;
  background-color: #272822;
}
body[data-theme="dracula"] {
  color: #f8f8f2;
  border-color: #444b59;
  background-color: #282a36;
}
body[data-theme="dracula"] table thead tr {
  background-color: #242631;
}
body[data-theme="dracula"] table thead th {
  border-color: #444b59;
}
body[data-theme="dracula"] table thead th:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="dracula"] table tbody tr:nth-child(2n + 1) {
  background-color: #282a36;
}
body[data-theme="dracula"] table tbody tr:nth-child(2n) {
  background-color: #242631;
}
body[data-theme="dracula"] table tbody td {
  border-color: #444b59;
}
body[data-theme="dracula"] table tbody td:last-child {
  border-right: solid 1px #444b59;
}
body[data-theme="dracula"] kbd {
  background-color: #1e2127;
}
body[data-theme="dracula"] dl {
  border-color: #444b59;
  background-color: #242631;
}
body[data-theme="dracula"] dt {
  border-color: #444b59;
}
body[data-theme="dracula"] dd {
  border-color: #444b59;
  background-color: #282a36;
}
/*# sourceMappingURL=browser/components/markdown.css.map */

body {
  font-family: '华文楷体','meiryo','Microsoft YaHei','helvetica','arial','sans-serif';
  font-size: 16px;
  false
}
@media print {
  body {
    padding-bottom: initial;
  }
}
code {
  font-family: '华文楷体','Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro','monospace';
  background-color: rgba(0,0,0,0.04);
}
.lineNumber {
  display: block !important;
  font-family: '华文楷体','Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro','monospace';
}

.clipboardButton {
  color: rgba(147,147,149,0.8);;
  fill: rgba(147,147,149,1);;
  border-radius: 50%;
  margin: 0px 10px;
  border: none;
  background-color: transparent;
  outline: none;
  height: 15px;
  width: 15px;
  cursor: pointer;
}

.clipboardButton:hover {
  transition: 0.2s;
  color: #939395;
  fill: #939395;
  background-color: rgba(0,0,0,0.1);
}

h1, h2 {
  border: none;
}

h1 {
  padding-bottom: 4px;
  margin: 1em 0 8px;
}

h2 {
  padding-bottom: 0.2em;
  margin: 1em 0 0.37em;
}

body p {
  white-space: normal;
}

@media print {
  body[data-theme="white"] {
    color: #000;
    background-color: #fff;
  }
  .clipboardButton {
    display: none
  }
}


</style>
                   <link rel="stylesheet" href="css/erlang-dark.css"><link rel="stylesheet" href="css/katex.min.css"><link rel="stylesheet" href="css/codemirror.css">
                 </head>
                 <body><h1 id="%E8%85%BE%E8%AE%AF%E4%BA%91-ubuntu%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F-%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8AJavaWeb%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A52003-can%E2%80%99t-connect-to-MYSQL-server-on-%E2%80%98%E2%80%9910060%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88" data-line="0">腾讯云 ubuntu操作系统  服务器上JavaWeb开发环境搭建,远程连接2003-can’t connect to MYSQL server on ‘’(10060)解决方案</h1>
<h2 id="%E4%B8%80%E3%80%81-ubuntu-%E5%AE%89%E8%A3%85jdk" data-line="1">一、 ubuntu 安装jdk</h2>
<p data-line="2">参考文章<br />
<a href="https://www.cnblogs.com/smiler/p/6939913.html">Ubuntu 安装 JDK8 的两种方式 - 幕三少 - 博客园</a><br />
Linux 程序安装的一些常用命令</p>
<pre class="code CodeMirror" data-line="5">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span><span class="CodeMirror-linenumber">2</span><span class="CodeMirror-linenumber">3</span><span class="CodeMirror-linenumber">4</span><span class="CodeMirror-linenumber">5</span><span class="CodeMirror-linenumber">6</span><span class="CodeMirror-linenumber">7</span><span class="CodeMirror-linenumber">8</span><span class="CodeMirror-linenumber">9</span></span>
        <code class="shell">sudo
# sudo 在Linux系统中表示系统管理员所允许的权限
apt
# Linux 下的安装包管理工具
sudo apt-get install # ——（package 安装包）
sudo apt-get update #——更新源
sudo apt-get upgrade #——更新已安装的包
sudo apt-get dist-upgrade # ———升级系统
apt-get source #——（package 下载该包的源代码)
</code>
      </pre><h4 id="1%E6%B7%BB%E5%8A%A0ppa" data-line="16">1.添加ppa</h4>
<pre class="code CodeMirror" data-line="17">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span><span class="CodeMirror-linenumber">2</span><span class="CodeMirror-linenumber">3</span></span>
        <code class="shell">sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
 # 更新源
</code>
      </pre><h4 id="2%E5%AE%89%E8%A3%85oracle-java-installerjdk8" data-line="23">2.安装oracle-java-installer(jdk8)</h4>
<pre class="code CodeMirror" data-line="24">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo apt-get install oracle-java8-installer
</code>
      </pre><h4 id="3%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%AE%89%E8%A3%85%E6%88%90%E5%8A%9F" data-line="27">3.检查是否安装成功</h4>
<pre class="code CodeMirror" data-line="28">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span><span class="CodeMirror-linenumber">2</span><span class="CodeMirror-linenumber">3</span></span>
        <code class="shell">java 
java -version
javac
</code>
      </pre><p data-line="33">##二、 ubuntu 安装 tomcat</p>
<h4 id="1%E6%9B%B4%E6%96%B0%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8" data-line="34">1.更新软件包管理器</h4>
<pre class="code CodeMirror" data-line="35">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo apt-get update
</code>
      </pre><h4 id="2apt%E5%91%BD%E4%BB%A4%E5%AE%89%E8%A3%85Tomcat8" data-line="38">2.apt命令安装Tomcat8</h4>
<pre class="code CodeMirror" data-line="39">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo apt-get install tomcat8
</code>
      </pre><h4 id="3%E5%90%AF%E5%8A%A8%E3%80%81%E5%85%B3%E9%97%AD%E3%80%81%E9%87%8D%E5%90%AFTomcat" data-line="42">3.启动、关闭、重启Tomcat</h4>
<h5 id="31-%E5%90%AF%E5%8A%A8-tomcat8" data-line="43">3.1 启动 tomcat8</h5>
<pre class="code CodeMirror" data-line="44">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo service tomcat8 start
</code>
      </pre><h5 id="32-%E5%85%B3%E9%97%ADtomcat8" data-line="47">3.2 关闭tomcat8</h5>
<pre class="code CodeMirror" data-line="48">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo service tomcat8 stop
</code>
      </pre><h5 id="33-%E9%87%8D%E5%90%AFtomcat8" data-line="51">3.3 重启tomcat8</h5>
<pre class="code CodeMirror" data-line="52">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo service tomcat8 stop
</code>
      </pre><h4 id="4%E3%80%81%E4%BD%BF%E7%94%A8-apt-get-%E5%91%BD%E4%BB%A4-%E5%AE%89%E8%A3%85%E5%90%8E%E7%9A%84-tomcat-7%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E8%AF%B4%E6%98%8E" data-line="55">4、使用 apt-get 命令 安装后的 tomcat 7的目录结构说明</h4>
<pre class="code CodeMirror" data-line="56">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span><span class="CodeMirror-linenumber">2</span><span class="CodeMirror-linenumber">3</span><span class="CodeMirror-linenumber">4</span><span class="CodeMirror-linenumber">5</span><span class="CodeMirror-linenumber">6</span></span>
        <code class="c">/etc/tomcat7 　　：全局配置
/usr/share/tomcat7/ 　　：程序主目录
/usr/share/tomcat7/conf/Catalina/localhost/ 　　：本机部署的 Catalina 配置
/var/lib/tomcat7/ 　　：工作主目录
/var/lib/tomcat7/webapps 　　：应用文件实际存放于此
/var/lib/tomcat7/work 　　：动态工作目录（动态编译的 .jsp 存放于此）
</code>
      </pre><h4 id="5%E6%A3%80%E6%B5%8B" data-line="64">5.检测</h4>
<p data-line="65">5.1 可以通过 curl（如果你的 Linux 没有安装 桌面，可以通过这个方式进行测试）<br />
curl <a href="http://localhost:8080">http://localhost:8080</a></p>
<h2 id="%E4%B8%89%E3%80%81ubuntu-%E5%AE%89%E8%A3%85mySQL" data-line="68">三、ubuntu 安装mySQL</h2>
<p data-line="69">参考文档：<br />
<a href="https://blog.csdn.net/weixx3/article/details/80782479">Ubuntu18.04 安装MySQL - 尘埃安然 - CSDN博客</a></p>
<h4 id="1%E6%9B%B4%E6%96%B0%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8-1" data-line="71">1.更新软件包管理器</h4>
<pre class="code CodeMirror" data-line="72">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo apt-get update
</code>
      </pre><h4 id="2apt%E5%91%BD%E4%BB%A4%E5%AE%89%E8%A3%85mysql" data-line="75">2.apt命令安装mysql</h4>
<pre class="code CodeMirror" data-line="76">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo apt-get install mysql-server
</code>
      </pre><h4 id="3%E9%85%8D%E7%BD%AEMySQL" data-line="79">3.配置MySQL</h4>
<pre class="code CodeMirror" data-line="80">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo mysql_secure_installation
</code>
      </pre><h4 id="4%E6%A3%80%E6%9F%A5mysql%E7%8A%B6%E6%80%81" data-line="83">4.检查mysql状态</h4>
<pre class="code CodeMirror" data-line="84">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">systemctl status mysql.service
</code>
      </pre><h4 id="5-%E8%AE%BE%E7%BD%AE%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE" data-line="87">5. 设置远程访问</h4>
<p data-line="88">5.1 用户登录</p>
<pre class="code CodeMirror" data-line="89">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo mysql -u -root -p
</code>
      </pre><p data-line="92">5.2 设置远程用户登录权限</p>
<pre class="code CodeMirror" data-line="93">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">GRANT ALL PRIVILEGES ON *.* TO ubuntu@'%' IDENTIFIED BY 'LN520twy@' WITH GRANT OPTION;
</code>
      </pre><blockquote data-line="96">
<p data-line="96"><strong>填坑:</strong><br />
设置远程用户登录权限,密码设置太简单<br />
<img src="attachments%5Cf44489ba.png" alt="授权密码设置太简单.png" /></p>
</blockquote>
<p data-line="100">5.3 重启数据库</p>
<pre class="code CodeMirror" data-line="101">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo service mysql restart
</code>
      </pre><h2 id="MySQL-%E5%91%BD%E4%BB%A4%E8%A1%8C" data-line="105">MySQL 命令行</h2>
<p data-line="106">参考文档<br />
<a href="https://www.cnblogs.com/dannyyao/p/6533567.html">MySQL命令行学习 - 蛋尼 - 博客园</a></p>
<h3 id="1-%E7%99%BB%E5%BD%95mysql" data-line="108">1. 登录mysql</h3>
<pre class="code CodeMirror" data-line="109">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span><span class="CodeMirror-linenumber">2</span><span class="CodeMirror-linenumber">3</span><span class="CodeMirror-linenumber">4</span></span>
        <code class="shell">mysql -u root -p
# 本地登录
mysql -hxx.xx.xx.xx -u -pxxx
#远程登录
</code>
      </pre><h3 id="2%E6%9F%A5%E7%9C%8B%E6%95%B0%E6%8D%AE%E5%BA%93" data-line="115">2.查看数据库</h3>
<pre class="code CodeMirror" data-line="116">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="sql">show databases;
</code>
      </pre><h3 id="3-%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93" data-line="119">3. 连接数据库</h3>
<pre class="code CodeMirror" data-line="120">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="sql">use db_name;
</code>
      </pre><h3 id="3-%E6%9F%A5%E7%9C%8B%E6%95%B0%E6%8D%AE%E8%A1%A8" data-line="123">3. 查看数据表</h3>
<pre class="code CodeMirror" data-line="124">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="sql">show tables;
</code>
      </pre><h3 id="4%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E9%80%89%E6%8B%A9%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93" data-line="127">4.查看当前选择的数据库</h3>
<pre class="code CodeMirror" data-line="128">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="sql">select database();
</code>
      </pre><h3 id="5%E6%9F%A5%E8%AF%A2mysql%E7%89%88%E6%9C%AC" data-line="131">5.查询mysql版本</h3>
<pre class="code CodeMirror" data-line="132">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="sql">select version();
</code>
      </pre><h3 id="6%E6%9F%A5%E7%9C%8B%E8%A1%A8%E7%BB%93%E6%9E%84" data-line="135">6.查看表结构</h3>
<pre class="code CodeMirror" data-line="136">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="sql">describe &lt;表名&gt;;
</code>
      </pre><h3 id="7%E7%9B%B4%E6%8E%A5%E8%BF%9B%E8%A1%8CSQL%E8%AF%AD%E5%8F%A5" data-line="139">7.直接进行SQL语句</h3>
<p data-line="140"><img src="attachments%5Cff831617.png" alt="mysql命令.png" /></p>
<h3 id="8%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95mysql%E5%91%BD%E4%BB%A4" data-line="142">8.远程登录mysql命令</h3>
<pre class="code CodeMirror" data-line="143">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">mysql -h 129.211.19.199 -u ubuntu -p -P 3306
</code>
      </pre><h2 id="%E5%85%A5%E5%9D%91%E6%97%A5%E5%BF%97" data-line="148">入坑日志</h2>
<h3 id="%E9%97%AE%E9%A2%98%E4%B8%80%E5%85%B3%E4%BA%8E%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A52003-can%E2%80%99t-connect-to-MYSQL-server-on-%E2%80%98%E2%80%9910060" data-line="149">问题一:关于远程连接2003-can’t connect to MYSQL server on ‘’(10060)</h3>
<p data-line="150">参考文章:<br />
<a href="https://blog.csdn.net/freezingxu/article/details/77088506">在Ubuntu/Linux环境下使用MySQL：开放/修改3306端口、开放访问权限 - 女儿控老徐的专栏 - CSDN博客</a><br />
<a href="https://www.cnblogs.com/patrickding/p/6435459.html">Ubuntu 16.04下开启Mysql 3306端口远程访问 - PatrickDing - 博客园</a><br />
两篇结合看,效果很好,第一篇过程清楚,第二篇比较精炼</p>
<h4 id="--%E5%8E%9F%E5%9B%A01%E6%9C%AA%E6%8E%88%E6%9D%83-%E8%A7%81%E4%B8%8A%E6%96%87%E8%AE%BE%E7%BD%AE%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5" data-line="154">-  原因1:未授权 (见上文:设置远程连接)</h4>
<p data-line="155">设置远程用户登录权限</p>
<pre class="code CodeMirror" data-line="156">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">GRANT ALL PRIVILEGES ON *.* TO ubuntu@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
</code>
      </pre><p data-line="159">解释一下:</p>
<ol>
<li data-line="160">grant  all privileges on ‘.’  to  ubuntu 表示把mysql所有的权限都给了 用户ubuntu(自定义)</li>
<li data-line="161">identifiend by ‘你的密码’ 表示认证方式是你的密码,注意太简单的密码,可能会报’当前密码不符合mysql 的安全策略’,解决方案很简单,密码要有大小写字母和数字和特殊字符</li>
<li data-line="162">with grant option 表示你可以把该权限下放给其他用户</li>
</ol>
<h4 id="--%E5%8E%9F%E5%9B%A02%E6%9C%AA%E5%BC%80%E6%94%BE3306%E7%AB%AF%E5%8F%A3%E7%BB%99%E5%85%B6%E4%BB%96ip" data-line="163">- 原因2.未开放3306端口给其他ip</h4>
<h5 id="1-%E6%9F%A5%E7%9C%8B%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E5%BC%80%E6%94%BE" data-line="164">1. 查看端口是否开放</h5>
<pre class="code CodeMirror" data-line="165">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">netstat -an|grep 3306
</code>
      </pre><p data-line="168"><img src="attachments%5Cb79011c4.png" alt="3306端口绑定本地ip.png" /></p>
<h5 id="2-%E4%BF%AE%E6%94%B9mysql%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" data-line="169">2. 修改mysql的配置文件</h5>
<pre class="code CodeMirror" data-line="170">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">vim /etc/mysql/mysql.conf.d/mysqld.cnf
</code>
      </pre><h5 id="3%E6%B3%A8%E9%87%8A%E6%8E%89bind-address-127001" data-line="173">3.注释掉<code>bind-address = 127.0.0.1</code></h5>
<p data-line="174"><strong>温馨提示:</strong><br />
有些同学可能没接触过Linuxa,在ubuntu上修改文件 ,可以用vim 编辑,是使用上下左右按键修改位置,用insert按键(小键盘0 ins),插入# 表示注释掉 ubuntu 上的mysql绑定的ip地址<br />
<img src="attachments%5C9ab6318e.png" alt="在bind-addresss加#注释掉.png" /></p>
<h5 id="4%E9%87%8D%E5%90%AF%E6%95%B0%E6%8D%AE%E5%BA%93%E5%90%A6%E5%88%99%E4%B8%8D%E7%94%9F%E6%95%88" data-line="177">4.重启数据库,否则不生效</h5>
<pre class="code CodeMirror" data-line="178">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">sudo service mysql restart
</code>
      </pre><p data-line="181"><img src="attachments%5Cb27f5ed0.png" alt="修改mysql配置文件要重启mysql.png" /></p>
<h5 id="5%E6%9C%AC%E5%9C%B0%E7%99%BB%E5%BD%95%E8%BF%9C%E7%A8%8B%E6%95%B0%E6%8D%AE%E5%BA%93" data-line="182">5.本地登录远程数据库</h5>
<p data-line="183">命令行方式</p>
<pre class="code CodeMirror" data-line="184">
        <span class="filename"></span>
        <span class="lineNumber CodeMirror-gutters"><span class="CodeMirror-linenumber">1</span></span>
        <code class="shell">mysql -h 129.211.*.199 -u ubuntu -p -P 3306  # 用你服务器的ip
</code>
      </pre><p data-line="187">客户端方式<br />
<img src="attachments%5Cbcff7186.png" alt="navicat连接远程mysql.png" /></p>
<h4 id="--%E5%8E%9F%E5%9B%A03-%E4%BD%A0%E6%B2%A1%E8%81%94%E7%BD%91%E4%BD%A0%E5%AF%86%E7%A0%81%E9%94%99%E4%BA%86%E7%AD%89%E7%AD%89%E7%BB%86%E8%8A%82%E6%80%A7%E9%97%AE%E9%A2%98%E7%BB%86%E5%BF%83%E4%B8%80%E7%82%B9" data-line="189">- 原因3. 你没联网,你密码错了,等等细节性问题,细心一点</h4>
</body>
              </html>